## 基于INA219实现电流、电压、功率采集 林恩德  2022.6.18
###INA219利用100mΩ的分流电阻实现电流采集
###微雪的采集版采用I2C通讯，包括4个采集通道，地址分别为：0x40,0x41,0x42,0x43
###除了默认的I2C1外，用户还可以通过配置boot/config.txt增加新的i2c。如:
### dtoverlay=i2c-gpio,bus=3,i2c_gpio_delay_us=2,i2c_gpio_sda=20,i2c_gpio_scl=21
### 指定总线3，其BCM码为20,21，对应的GPIO为28,29。
import monitor.ina219
class INA219Channel:
    def __init__(self,i2cbus=1,addr=0x42):
        self.ina219 = monitor.ina219.INA219(i2c_bus = i2cbus,addr = addr)
        ### 总线电压，负载电压，输出与GND之间的电压  V
        self.bus_voltage = 0
        ### 差分电压，分流电阻上的电压，总线电压+差分电压=电源输出电压 mV
        self.shunt_voltage = 0
        ### 电流，毫安
        self.current = 0
        ###功率 W
        self.power = 0
    def collect(self):
        self.bus_voltage = round(self.ina219.getBusVoltage_V(),4)             # voltage on V- (load side)
        self.shunt_voltage = round(self.ina219.getShuntVoltage_mV(),5) # voltage between V+ and V- across the shunt
        self.current = round(self.ina219.getCurrent_mA(),4)                   # current in mA
        self.power =round(self.ina219.getPower_W(),4)                        # power in watts
